Github Action과 Code Pipeline 비교해보기
안녕하세요 클래스메소드의 수재입니다.
보통 AWS 환경에서 CI/CD 환경을 구현하기 위해서 AWS Code 시리즈를 사용하는 방법을 AWS에서 안내하는 경우가 많습니다.
이 중 CI/CD의 전체적인 파이프라인을 관리하는 Code Pipeline 라는 서비스가 있습니다.
그리고 많은 엔지니어들이 이용하고 있는 Github에서도 Github Actions라는 CI/CD 서비스를 제공하고 있습니다.
이번에는 AWS Code Pipeline 과 Github Actions에 대하여 알아보고 비교해보도록 하겠습니다.
AWS Code Series에 대해
본문에 들어가기 전에 간단하게 AWS의 Code 시리즈에 대하여 알아보겠습니다.
현재 CI/CD에 관련된 Code 서비스는 다음과 같습니다.1 2
- AWS Code Commit
- 팀에서 코드를 공동으로 관리할 수 있는 코드 리포지토리 서비스
- AWS Code Build
- 코드의 컴파일 및 테스트를 진행한 후 배포를 준비하는 서비스
- AWS Code Deploy
- 준비가 된 파일을 대상에 배포하는 서비스
- AWS Code Pipeline
- 코드 빌드, 배포, 테스트 및 릴리스 등 CI/CD 의 전체적인 워크플로우를 관리하는 서비스
이러한 서비스들을 연계하여 CI/CD 환경을 구축할 수 있습니다.
이번 글에서는 이 중에서 전체적인 플로우를 관리하는 Pipeline에 대하여 알아보고 비교해보려 합니다.
Code Pipeline
AWS CodePipeline은 빠르고 안정적인 애플리케이션 및 인프라 업데이트를 위해 릴리스 파이프라인을 자동화하는 데 도움이 되는 완전관리형의 지속적 전달 서비스입니다.
소스의 커밋부터 배포까지 전체적인 워크플로우를 관리하는 서비스입니다.
다음과 같은 플로우로 프로세스가 진행됩니다.
개발자가 코드를 커밋하면 Pipeline이 변경 사항을 감지합니다. 변경 사항이 빌드 된 후 테스트가 구성되어 있다면 테스트도 진행합니다.
이후 스테이징 서버에서 코드를 테스트한 후 문제가 없다면 수동 승인을 대기합니다. 수동 승인도 완료된다면 프로덕션 환경에 배포가 진행됩니다.
개념은 대략 다음 이미지와 같습니다.
일부 액션은 결과물로 아티팩트를 작성하거나 아티팩트를 읽고 작업을 진행합니다. Pipeline이 생성되면 각 작업의 실행은 자동으로 트리거됩니다.
스테이지의 모든 작업이 문제없이 실행되면 다음 스테이지로 전환 됩니다.
Code Pipeline은 다른 Code 시리즈 뿐만 아니라 다양한 서드파티 제품들과도 통합하여 사용할 수 있습니다.
통합할 수 있는 서비스의 전체 목록은 공식 문서를 참고해주세요.
Pipeline 을 이용한 예는 다음과 같습니다.3
AWS 제공하고 있는 튜토리얼은 공식 문서를 참고하시는 걸 추천합니다.
AWS 내의 서비스이기 때문에 주 배포 대상은 AWS 의 서비스입니다.4
Github Actions
Github에서 제공하는 CI/CD 를 위한 서비스입니다.
Github 리포지토리에 풀 리퀘스트나 이슈 등 어떠한 이벤트(event)가 발생하면 자동으로 이를 감지하여 작업(jobs)을 실행하거나 반복합니다. 작업은 여러 개의 단계(step)를 따라 진행됩니다.
그리고 워크플로(workflow)라는 관리 단위 안에 이러한 작업이 한 개 이상 구성되어 있습니다.
각 작업은 각각의 러너(runner)에서 실행됩니다.
이미지로는 다음과 같습니다.
워크플로는 yaml 형식으로 정의하며 .github/workflows/
디렉토리 아래에 저장합니다.
Github Actions를 사용한 아키텍쳐 예는 다음과 같습니다.5
Github Actions 는 모든 클라우드를 대상으로 사용할 수 있습니다.
비교
비교해보면 두 서비스 모두 CI/CD를 지원하고 있기 때문에 용도나 컨셉이 거의 비슷합니다.
GitHub Actions | AWS CodePipeline | |
---|---|---|
프리 티어(Linux) | 플랜마다 다르므로 링크로 대체 | 매월 50분 |
파이프라인 비용 | 무료 | 파이프라인 당 월 $1.00 |
빌드 작업 비용 | 분당 $0.0166 | 분당 $0.0107 |
사용 가능한 빌드 환경 | 리눅스, 윈도우, macOS | 리눅스, 윈도우 |
소스 코드 저장소 | GitHub | GitHub, Bitbucket, AWS CodeCommit, Amazon S3 |
배포 대상 | 대부분의 클라우드 서비스 | 주로 AWS. 다른 클라우드 제공업체에도 배포 가능 |
AWS 인증 | GitHub Secrets에 IAM 사용자의 액세스 키를 저장하여 사용하는게 일반적8 | IAM 역할을 사용. 액세스 키를 관리할 필요 없음 |
이 외에는 대부분의 개발자는 Github를 사용해본 경험이 있기 때문에 러닝커브가 조금 더 낮은 점도 있습니다.
개인적으로는 다음과 같은 기준으로 사용할 서비스를 나눌 수 있다고 생각했습니다.
- 사용하는 코드 및 관련 리소스가 AWS에만 국한되어 있어야하는가?
- CI/CD 작업에 필요한 스펙을 제공해주고 있는가?
- Github는 어떤 플랜을 사용하고 있는가?
- 예상되는 요금은 어디가 더 저렴한가?
- 어느 정도의 러닝 커브를 감당할 수 있는가?
마무리
비슷한 두 서비스이기 때문에 확실히 이게 더 낫다 이런 점은 없지만 세세한 부분에서 차이가 있는 것을 확인할 수 있었습니다.
필요한 사양이나 기간을 확인하고 서비스를 도입하는 것을 추천합니다.
긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 언제나 환영합니다. must01940 지메일로 연락 주시면 감사합니다!
본 블로그 게시글을 보시고 문의 사항이 있으신 분들은
클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !